package com.edu.aspect;

import com.edu.bean.CommonResult;
import com.edu.exception.MyException;
import org.aopalliance.intercept.Joinpoint;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

import java.util.Date;

/**
 * @Author:mx
 * @Date:2025/11/12-14:34:19
 */
public class MyAdvise {

    /*
    *       前置通知
    *           可以加入 JoinPoint 表示连接点，可以获取到 业务方法的一系列信息
    *           如果要 阻止 业务方法的执行 ，需要在内部手动抛出异常。（了解）
    * */
    public void beforeAdvise(JoinPoint jp){
//        System.out.println(jp);
//        System.out.println(jp.getSignature().getName());
//        System.out.println(jp.getTarget());
//        System.out.println(jp.getArgs());
//        System.out.println(jp.getArgs().length);
//        for (Object arg : jp.getArgs()) {
//            System.out.println(arg);
//        }
        System.out.println("前置通知");
//        throw new MyException("权限不足");
    }

    /*
    *   后置返回通知
    *       业务方法 正常执行完毕之后运行
    *       参数中可以加入 JoinPoint 和一个 Object 用于接收 原始业务方法的防护值
    *       返回值 不能被修改。
    *
    * */
    public void afterReturnAdvise(JoinPoint jt,Object re){
//        CommonResult cr = (CommonResult) re;
//        System.out.println(cr.getResult());
//        cr.setResult(2);
        System.out.println("执行了后置返回通知");
    }


    /*
    *   后置异常通知
    *       参数可以加入 JoinPoint
    *                   Exception接收异常对象
    * */
    public void afterThrowingAdvise(JoinPoint jt,Exception e){
        System.out.println("出错的原因是:"+e.getMessage());
        System.out.println("执行后了后置异常通知");
    }


    public void afterAdvise(JoinPoint jt){
        System.out.println("执行了 后置通知");
    }

    public Object aroundAdvise(ProceedingJoinPoint pjt){
        System.out.println("执行了环绕通知前置");
        Object re = null;
        try {
            re = pjt.proceed();//执行原始业务方法
            //
        } catch (Throwable e) {
            e.printStackTrace();
            //
        }
        System.out.println("执行了环绕通知后置");
        return 2012;
    }

}
